package br.com.toscano.contpedido.business;

import java.util.ArrayList;
import java.util.List;

import javax.inject.Inject;

import br.com.toscano.contpedido.domain.Funcionalidade;
import br.com.toscano.contpedido.domain.Perfil;
import br.com.toscano.contpedido.persistence.PerfilDAO;
import br.gov.frameworkdemoiselle.lifecycle.Startup;
import br.gov.frameworkdemoiselle.stereotype.BusinessController;
import br.gov.frameworkdemoiselle.template.DelegateCrud;
import br.gov.frameworkdemoiselle.transaction.Transactional;

@BusinessController
public class PerfilBC extends DelegateCrud<Perfil, Long, PerfilDAO> {
	
	private static final long serialVersionUID = 1L;

	@Inject
	private FuncionalidadeBC funcionaldiadeBC;

	@Startup
	@Transactional
	public void load() {
		if (findAll().isEmpty()) {
			insert(new Perfil("Administrador", funcionaldiadeBC.findAll()));
			
			List<Funcionalidade> listaFuncionalidade = new ArrayList<Funcionalidade>();
			listaFuncionalidade.add(funcionaldiadeBC.load(new Long(1)));
			listaFuncionalidade.add(funcionaldiadeBC.load(new Long(2)));
			listaFuncionalidade.add(funcionaldiadeBC.load(new Long(5)));
			listaFuncionalidade.add(funcionaldiadeBC.load(new Long(6)));
			listaFuncionalidade.add(funcionaldiadeBC.load(new Long(7)));
			listaFuncionalidade.add(funcionaldiadeBC.load(new Long(11)));
			listaFuncionalidade.add(funcionaldiadeBC.load(new Long(12)));

			insert(new Perfil("Caixa", listaFuncionalidade));
		}
		
		Funcionalidade fCancelar = this.funcionaldiadeBC.getFuncionalidadeCodigo("30");

		if (fCancelar != null) {
			Perfil perfil = this.load(1l);
			boolean tem = false;
			for(Funcionalidade f : perfil.getListaFuncionalidade()) {
				if (f.getId().equals(fCancelar.getId())) {
					tem = true;
					break;
				}
			}
			if (!tem) {
				perfil.getListaFuncionalidade().add(fCancelar);
				this.update(perfil);
			}
		}
	}	

	@Override
	@Transactional
	public void delete(Long id) {
		this.getDelegate().delete(id);
	}

	@Override
	@Transactional
	public void delete(List<Long> ids) {
		// TODO Auto-generated method stub
		for (Long id : ids) {
			this.delete(id);
		}
	}

}
